/***********************************************************************************
 * 文件名： mcu_lptimer.c
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		低功耗定时器驱动。
 * 修改记录：
 * 	2024/9/13: 初版。 刘言。
***********************************************************************************/
#include "mcu_lptimer.h"

#include "mcu.h"

void LpTim_Init()
{
    MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIMSEL_Msk, _LPTIM_CLK_SOURCE << 18); // LPTIM 使用 LSI 时钟

    /* Enable LPTIM1 interrupt */
    NVIC_SetPriority(LPTIM1_IRQn, 0);
    NVIC_EnableIRQ(LPTIM1_IRQn);
    SET_BIT(LPTIM1->IER, LPTIM_IER_ARRMIE); // 开启 自动重载匹配中断
    // SET_BIT(EXTI->IMR, EXTI_IMR_IM29);
    // CLEAR_BIT(EXTI->EMR, EXTI_IMR_IM29);

    SET_BIT(LPTIM1->CR, LPTIM_CR_ENABLE);   // 使能
    Mcu_Delayus(100);   // 置位 ENABLE 位后，需要延迟两个计数器时钟才能使能 LPTIM。

    LPTIM1->ARR = _LPTIM_ARR;               // 自动重载值，定时周期值
    Mcu_Delayus(100);   // 写入存在延时，确保写入成功

    LPTIM1->ICR = 0XFFFF; // 清除标志位
    
    SET_BIT(LPTIM1->CR, LPTIM_CR_CNTSTRT);  // 启动连续模式
}

u16 LpTim_GetCnt()
{
    u16 cnt_last = 0, cnt = 1;
    while(cnt_last != cnt)
    {
        cnt_last = LPTIM1->CNT;
        cnt = LPTIM1->CNT;
    }
    return cnt;
}




